/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
"use strict";

var $protobuf = require("protobufjs/minimal");

// Common aliases
var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;

// Exported root namespace
var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});

$root.mb = (function() {

    /**
     * Namespace mb.
     * @exports mb
     * @namespace
     */
    var mb = {};

    mb.AdImage = (function() {

        /**
         * Properties of an AdImage.
         * @memberof mb
         * @interface IAdImage
         * @property {string|null} [url] AdImage url
         * @property {string|null} [target] AdImage target
         * @property {string|null} [id] AdImage id
         */

        /**
         * Constructs a new AdImage.
         * @memberof mb
         * @classdesc Represents an AdImage.
         * @implements IAdImage
         * @constructor
         * @param {mb.IAdImage=} [properties] Properties to set
         */
        function AdImage(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * AdImage url.
         * @member {string} url
         * @memberof mb.AdImage
         * @instance
         */
        AdImage.prototype.url = "";

        /**
         * AdImage target.
         * @member {string} target
         * @memberof mb.AdImage
         * @instance
         */
        AdImage.prototype.target = "";

        /**
         * AdImage id.
         * @member {string} id
         * @memberof mb.AdImage
         * @instance
         */
        AdImage.prototype.id = "";

        /**
         * Creates a new AdImage instance using the specified properties.
         * @function create
         * @memberof mb.AdImage
         * @static
         * @param {mb.IAdImage=} [properties] Properties to set
         * @returns {mb.AdImage} AdImage instance
         */
        AdImage.create = function create(properties) {
            return new AdImage(properties);
        };

        /**
         * Encodes the specified AdImage message. Does not implicitly {@link mb.AdImage.verify|verify} messages.
         * @function encode
         * @memberof mb.AdImage
         * @static
         * @param {mb.IAdImage} message AdImage message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdImage.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.url != null && message.hasOwnProperty("url"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.url);
            if (message.target != null && message.hasOwnProperty("target"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.target);
            if (message.id != null && message.hasOwnProperty("id"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.id);
            return writer;
        };

        /**
         * Encodes the specified AdImage message, length delimited. Does not implicitly {@link mb.AdImage.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.AdImage
         * @static
         * @param {mb.IAdImage} message AdImage message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        AdImage.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes an AdImage message from the specified reader or buffer.
         * @function decode
         * @memberof mb.AdImage
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.AdImage} AdImage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdImage.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.AdImage();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.url = reader.string();
                    break;
                case 2:
                    message.target = reader.string();
                    break;
                case 3:
                    message.id = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an AdImage message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.AdImage
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.AdImage} AdImage
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        AdImage.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an AdImage message.
         * @function verify
         * @memberof mb.AdImage
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        AdImage.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.url != null && message.hasOwnProperty("url"))
                if (!$util.isString(message.url))
                    return "url: string expected";
            if (message.target != null && message.hasOwnProperty("target"))
                if (!$util.isString(message.target))
                    return "target: string expected";
            if (message.id != null && message.hasOwnProperty("id"))
                if (!$util.isString(message.id))
                    return "id: string expected";
            return null;
        };

        /**
         * Creates an AdImage message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.AdImage
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.AdImage} AdImage
         */
        AdImage.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.AdImage)
                return object;
            var message = new $root.mb.AdImage();
            if (object.url != null)
                message.url = String(object.url);
            if (object.target != null)
                message.target = String(object.target);
            if (object.id != null)
                message.id = String(object.id);
            return message;
        };

        /**
         * Creates a plain object from an AdImage message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.AdImage
         * @static
         * @param {mb.AdImage} message AdImage
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        AdImage.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.url = "";
                object.target = "";
                object.id = "";
            }
            if (message.url != null && message.hasOwnProperty("url"))
                object.url = message.url;
            if (message.target != null && message.hasOwnProperty("target"))
                object.target = message.target;
            if (message.id != null && message.hasOwnProperty("id"))
                object.id = message.id;
            return object;
        };

        /**
         * Converts this AdImage to JSON.
         * @function toJSON
         * @memberof mb.AdImage
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        AdImage.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return AdImage;
    })();

    mb.OnlineConfig = (function() {

        /**
         * Properties of an OnlineConfig.
         * @memberof mb
         * @interface IOnlineConfig
         * @property {Array.<mb.IAdImage>|null} [adImages] OnlineConfig adImages
         * @property {number|null} [testFlag] OnlineConfig testFlag
         */

        /**
         * Constructs a new OnlineConfig.
         * @memberof mb
         * @classdesc Represents an OnlineConfig.
         * @implements IOnlineConfig
         * @constructor
         * @param {mb.IOnlineConfig=} [properties] Properties to set
         */
        function OnlineConfig(properties) {
            this.adImages = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * OnlineConfig adImages.
         * @member {Array.<mb.IAdImage>} adImages
         * @memberof mb.OnlineConfig
         * @instance
         */
        OnlineConfig.prototype.adImages = $util.emptyArray;

        /**
         * OnlineConfig testFlag.
         * @member {number} testFlag
         * @memberof mb.OnlineConfig
         * @instance
         */
        OnlineConfig.prototype.testFlag = 0;

        /**
         * Creates a new OnlineConfig instance using the specified properties.
         * @function create
         * @memberof mb.OnlineConfig
         * @static
         * @param {mb.IOnlineConfig=} [properties] Properties to set
         * @returns {mb.OnlineConfig} OnlineConfig instance
         */
        OnlineConfig.create = function create(properties) {
            return new OnlineConfig(properties);
        };

        /**
         * Encodes the specified OnlineConfig message. Does not implicitly {@link mb.OnlineConfig.verify|verify} messages.
         * @function encode
         * @memberof mb.OnlineConfig
         * @static
         * @param {mb.IOnlineConfig} message OnlineConfig message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OnlineConfig.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.adImages != null && message.adImages.length)
                for (var i = 0; i < message.adImages.length; ++i)
                    $root.mb.AdImage.encode(message.adImages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
            if (message.testFlag != null && message.hasOwnProperty("testFlag"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.testFlag);
            return writer;
        };

        /**
         * Encodes the specified OnlineConfig message, length delimited. Does not implicitly {@link mb.OnlineConfig.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.OnlineConfig
         * @static
         * @param {mb.IOnlineConfig} message OnlineConfig message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        OnlineConfig.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes an OnlineConfig message from the specified reader or buffer.
         * @function decode
         * @memberof mb.OnlineConfig
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.OnlineConfig} OnlineConfig
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OnlineConfig.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.OnlineConfig();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    if (!(message.adImages && message.adImages.length))
                        message.adImages = [];
                    message.adImages.push($root.mb.AdImage.decode(reader, reader.uint32()));
                    break;
                case 2:
                    message.testFlag = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an OnlineConfig message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.OnlineConfig
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.OnlineConfig} OnlineConfig
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        OnlineConfig.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an OnlineConfig message.
         * @function verify
         * @memberof mb.OnlineConfig
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        OnlineConfig.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.adImages != null && message.hasOwnProperty("adImages")) {
                if (!Array.isArray(message.adImages))
                    return "adImages: array expected";
                for (var i = 0; i < message.adImages.length; ++i) {
                    var error = $root.mb.AdImage.verify(message.adImages[i]);
                    if (error)
                        return "adImages." + error;
                }
            }
            if (message.testFlag != null && message.hasOwnProperty("testFlag"))
                if (!$util.isInteger(message.testFlag))
                    return "testFlag: integer expected";
            return null;
        };

        /**
         * Creates an OnlineConfig message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.OnlineConfig
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.OnlineConfig} OnlineConfig
         */
        OnlineConfig.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.OnlineConfig)
                return object;
            var message = new $root.mb.OnlineConfig();
            if (object.adImages) {
                if (!Array.isArray(object.adImages))
                    throw TypeError(".mb.OnlineConfig.adImages: array expected");
                message.adImages = [];
                for (var i = 0; i < object.adImages.length; ++i) {
                    if (typeof object.adImages[i] !== "object")
                        throw TypeError(".mb.OnlineConfig.adImages: object expected");
                    message.adImages[i] = $root.mb.AdImage.fromObject(object.adImages[i]);
                }
            }
            if (object.testFlag != null)
                message.testFlag = object.testFlag | 0;
            return message;
        };

        /**
         * Creates a plain object from an OnlineConfig message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.OnlineConfig
         * @static
         * @param {mb.OnlineConfig} message OnlineConfig
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        OnlineConfig.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.adImages = [];
            if (options.defaults)
                object.testFlag = 0;
            if (message.adImages && message.adImages.length) {
                object.adImages = [];
                for (var j = 0; j < message.adImages.length; ++j)
                    object.adImages[j] = $root.mb.AdImage.toObject(message.adImages[j], options);
            }
            if (message.testFlag != null && message.hasOwnProperty("testFlag"))
                object.testFlag = message.testFlag;
            return object;
        };

        /**
         * Converts this OnlineConfig to JSON.
         * @function toJSON
         * @memberof mb.OnlineConfig
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        OnlineConfig.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return OnlineConfig;
    })();

    mb.CountPair = (function() {

        /**
         * Properties of a CountPair.
         * @memberof mb
         * @interface ICountPair
         * @property {number|null} [max] CountPair max
         * @property {number|null} [current] CountPair current
         */

        /**
         * Constructs a new CountPair.
         * @memberof mb
         * @classdesc Represents a CountPair.
         * @implements ICountPair
         * @constructor
         * @param {mb.ICountPair=} [properties] Properties to set
         */
        function CountPair(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * CountPair max.
         * @member {number} max
         * @memberof mb.CountPair
         * @instance
         */
        CountPair.prototype.max = 0;

        /**
         * CountPair current.
         * @member {number} current
         * @memberof mb.CountPair
         * @instance
         */
        CountPair.prototype.current = 0;

        /**
         * Creates a new CountPair instance using the specified properties.
         * @function create
         * @memberof mb.CountPair
         * @static
         * @param {mb.ICountPair=} [properties] Properties to set
         * @returns {mb.CountPair} CountPair instance
         */
        CountPair.create = function create(properties) {
            return new CountPair(properties);
        };

        /**
         * Encodes the specified CountPair message. Does not implicitly {@link mb.CountPair.verify|verify} messages.
         * @function encode
         * @memberof mb.CountPair
         * @static
         * @param {mb.ICountPair} message CountPair message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CountPair.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.max != null && message.hasOwnProperty("max"))
                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.max);
            if (message.current != null && message.hasOwnProperty("current"))
                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.current);
            return writer;
        };

        /**
         * Encodes the specified CountPair message, length delimited. Does not implicitly {@link mb.CountPair.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.CountPair
         * @static
         * @param {mb.ICountPair} message CountPair message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        CountPair.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a CountPair message from the specified reader or buffer.
         * @function decode
         * @memberof mb.CountPair
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.CountPair} CountPair
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CountPair.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.CountPair();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.max = reader.int32();
                    break;
                case 2:
                    message.current = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a CountPair message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.CountPair
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.CountPair} CountPair
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        CountPair.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a CountPair message.
         * @function verify
         * @memberof mb.CountPair
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        CountPair.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.max != null && message.hasOwnProperty("max"))
                if (!$util.isInteger(message.max))
                    return "max: integer expected";
            if (message.current != null && message.hasOwnProperty("current"))
                if (!$util.isInteger(message.current))
                    return "current: integer expected";
            return null;
        };

        /**
         * Creates a CountPair message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.CountPair
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.CountPair} CountPair
         */
        CountPair.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.CountPair)
                return object;
            var message = new $root.mb.CountPair();
            if (object.max != null)
                message.max = object.max | 0;
            if (object.current != null)
                message.current = object.current | 0;
            return message;
        };

        /**
         * Creates a plain object from a CountPair message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.CountPair
         * @static
         * @param {mb.CountPair} message CountPair
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        CountPair.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.max = 0;
                object.current = 0;
            }
            if (message.max != null && message.hasOwnProperty("max"))
                object.max = message.max;
            if (message.current != null && message.hasOwnProperty("current"))
                object.current = message.current;
            return object;
        };

        /**
         * Converts this CountPair to JSON.
         * @function toJSON
         * @memberof mb.CountPair
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        CountPair.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return CountPair;
    })();

    mb.UserInfo = (function() {

        /**
         * Properties of a UserInfo.
         * @memberof mb
         * @interface IUserInfo
         * @property {string|null} [id] UserInfo id
         * @property {string|null} [phone] UserInfo phone
         * @property {string|null} [name] UserInfo name
         * @property {string|null} [email] UserInfo email
         * @property {string|null} [password] UserInfo password
         * @property {number|null} [level] UserInfo level
         * @property {number|null} [balance] UserInfo balance
         * @property {number|null} [vipDueDate] UserInfo vipDueDate
         * @property {Array.<number>|null} [seenVideoList] UserInfo seenVideoList
         * @property {mb.ICountPair|null} [videoCanPlay] UserInfo videoCanPlay
         * @property {mb.ICountPair|null} [audioCanPlay] UserInfo audioCanPlay
         * @property {mb.ICountPair|null} [novelCanPlay] UserInfo novelCanPlay
         * @property {number|null} [version] UserInfo version
         */

        /**
         * Constructs a new UserInfo.
         * @memberof mb
         * @classdesc Represents a UserInfo.
         * @implements IUserInfo
         * @constructor
         * @param {mb.IUserInfo=} [properties] Properties to set
         */
        function UserInfo(properties) {
            this.seenVideoList = [];
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserInfo id.
         * @member {string} id
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.id = "";

        /**
         * UserInfo phone.
         * @member {string} phone
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.phone = "";

        /**
         * UserInfo name.
         * @member {string} name
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.name = "";

        /**
         * UserInfo email.
         * @member {string} email
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.email = "";

        /**
         * UserInfo password.
         * @member {string} password
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.password = "";

        /**
         * UserInfo level.
         * @member {number} level
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.level = 0;

        /**
         * UserInfo balance.
         * @member {number} balance
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.balance = 0;

        /**
         * UserInfo vipDueDate.
         * @member {number} vipDueDate
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.vipDueDate = 0;

        /**
         * UserInfo seenVideoList.
         * @member {Array.<number>} seenVideoList
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.seenVideoList = $util.emptyArray;

        /**
         * UserInfo videoCanPlay.
         * @member {mb.ICountPair|null|undefined} videoCanPlay
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.videoCanPlay = null;

        /**
         * UserInfo audioCanPlay.
         * @member {mb.ICountPair|null|undefined} audioCanPlay
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.audioCanPlay = null;

        /**
         * UserInfo novelCanPlay.
         * @member {mb.ICountPair|null|undefined} novelCanPlay
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.novelCanPlay = null;

        /**
         * UserInfo version.
         * @member {number} version
         * @memberof mb.UserInfo
         * @instance
         */
        UserInfo.prototype.version = 0;

        /**
         * Creates a new UserInfo instance using the specified properties.
         * @function create
         * @memberof mb.UserInfo
         * @static
         * @param {mb.IUserInfo=} [properties] Properties to set
         * @returns {mb.UserInfo} UserInfo instance
         */
        UserInfo.create = function create(properties) {
            return new UserInfo(properties);
        };

        /**
         * Encodes the specified UserInfo message. Does not implicitly {@link mb.UserInfo.verify|verify} messages.
         * @function encode
         * @memberof mb.UserInfo
         * @static
         * @param {mb.IUserInfo} message UserInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserInfo.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.id != null && message.hasOwnProperty("id"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);
            if (message.phone != null && message.hasOwnProperty("phone"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.phone);
            if (message.name != null && message.hasOwnProperty("name"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);
            if (message.email != null && message.hasOwnProperty("email"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.email);
            if (message.password != null && message.hasOwnProperty("password"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.password);
            if (message.level != null && message.hasOwnProperty("level"))
                writer.uint32(/* id 6, wireType 0 =*/48).int32(message.level);
            if (message.balance != null && message.hasOwnProperty("balance"))
                writer.uint32(/* id 7, wireType 5 =*/61).float(message.balance);
            if (message.vipDueDate != null && message.hasOwnProperty("vipDueDate"))
                writer.uint32(/* id 10, wireType 0 =*/80).int32(message.vipDueDate);
            if (message.seenVideoList != null && message.seenVideoList.length) {
                writer.uint32(/* id 11, wireType 2 =*/90).fork();
                for (var i = 0; i < message.seenVideoList.length; ++i)
                    writer.int32(message.seenVideoList[i]);
                writer.ldelim();
            }
            if (message.videoCanPlay != null && message.hasOwnProperty("videoCanPlay"))
                $root.mb.CountPair.encode(message.videoCanPlay, writer.uint32(/* id 12, wireType 2 =*/98).fork()).ldelim();
            if (message.audioCanPlay != null && message.hasOwnProperty("audioCanPlay"))
                $root.mb.CountPair.encode(message.audioCanPlay, writer.uint32(/* id 13, wireType 2 =*/106).fork()).ldelim();
            if (message.novelCanPlay != null && message.hasOwnProperty("novelCanPlay"))
                $root.mb.CountPair.encode(message.novelCanPlay, writer.uint32(/* id 14, wireType 2 =*/114).fork()).ldelim();
            if (message.version != null && message.hasOwnProperty("version"))
                writer.uint32(/* id 15, wireType 0 =*/120).int32(message.version);
            return writer;
        };

        /**
         * Encodes the specified UserInfo message, length delimited. Does not implicitly {@link mb.UserInfo.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.UserInfo
         * @static
         * @param {mb.IUserInfo} message UserInfo message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserInfo.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserInfo message from the specified reader or buffer.
         * @function decode
         * @memberof mb.UserInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.UserInfo} UserInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserInfo.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.UserInfo();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.id = reader.string();
                    break;
                case 2:
                    message.phone = reader.string();
                    break;
                case 3:
                    message.name = reader.string();
                    break;
                case 4:
                    message.email = reader.string();
                    break;
                case 5:
                    message.password = reader.string();
                    break;
                case 6:
                    message.level = reader.int32();
                    break;
                case 7:
                    message.balance = reader.float();
                    break;
                case 10:
                    message.vipDueDate = reader.int32();
                    break;
                case 11:
                    if (!(message.seenVideoList && message.seenVideoList.length))
                        message.seenVideoList = [];
                    if ((tag & 7) === 2) {
                        var end2 = reader.uint32() + reader.pos;
                        while (reader.pos < end2)
                            message.seenVideoList.push(reader.int32());
                    } else
                        message.seenVideoList.push(reader.int32());
                    break;
                case 12:
                    message.videoCanPlay = $root.mb.CountPair.decode(reader, reader.uint32());
                    break;
                case 13:
                    message.audioCanPlay = $root.mb.CountPair.decode(reader, reader.uint32());
                    break;
                case 14:
                    message.novelCanPlay = $root.mb.CountPair.decode(reader, reader.uint32());
                    break;
                case 15:
                    message.version = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserInfo message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.UserInfo
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.UserInfo} UserInfo
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserInfo.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserInfo message.
         * @function verify
         * @memberof mb.UserInfo
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserInfo.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.id != null && message.hasOwnProperty("id"))
                if (!$util.isString(message.id))
                    return "id: string expected";
            if (message.phone != null && message.hasOwnProperty("phone"))
                if (!$util.isString(message.phone))
                    return "phone: string expected";
            if (message.name != null && message.hasOwnProperty("name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.email != null && message.hasOwnProperty("email"))
                if (!$util.isString(message.email))
                    return "email: string expected";
            if (message.password != null && message.hasOwnProperty("password"))
                if (!$util.isString(message.password))
                    return "password: string expected";
            if (message.level != null && message.hasOwnProperty("level"))
                if (!$util.isInteger(message.level))
                    return "level: integer expected";
            if (message.balance != null && message.hasOwnProperty("balance"))
                if (typeof message.balance !== "number")
                    return "balance: number expected";
            if (message.vipDueDate != null && message.hasOwnProperty("vipDueDate"))
                if (!$util.isInteger(message.vipDueDate))
                    return "vipDueDate: integer expected";
            if (message.seenVideoList != null && message.hasOwnProperty("seenVideoList")) {
                if (!Array.isArray(message.seenVideoList))
                    return "seenVideoList: array expected";
                for (var i = 0; i < message.seenVideoList.length; ++i)
                    if (!$util.isInteger(message.seenVideoList[i]))
                        return "seenVideoList: integer[] expected";
            }
            if (message.videoCanPlay != null && message.hasOwnProperty("videoCanPlay")) {
                var error = $root.mb.CountPair.verify(message.videoCanPlay);
                if (error)
                    return "videoCanPlay." + error;
            }
            if (message.audioCanPlay != null && message.hasOwnProperty("audioCanPlay")) {
                var error = $root.mb.CountPair.verify(message.audioCanPlay);
                if (error)
                    return "audioCanPlay." + error;
            }
            if (message.novelCanPlay != null && message.hasOwnProperty("novelCanPlay")) {
                var error = $root.mb.CountPair.verify(message.novelCanPlay);
                if (error)
                    return "novelCanPlay." + error;
            }
            if (message.version != null && message.hasOwnProperty("version"))
                if (!$util.isInteger(message.version))
                    return "version: integer expected";
            return null;
        };

        /**
         * Creates a UserInfo message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.UserInfo
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.UserInfo} UserInfo
         */
        UserInfo.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.UserInfo)
                return object;
            var message = new $root.mb.UserInfo();
            if (object.id != null)
                message.id = String(object.id);
            if (object.phone != null)
                message.phone = String(object.phone);
            if (object.name != null)
                message.name = String(object.name);
            if (object.email != null)
                message.email = String(object.email);
            if (object.password != null)
                message.password = String(object.password);
            if (object.level != null)
                message.level = object.level | 0;
            if (object.balance != null)
                message.balance = Number(object.balance);
            if (object.vipDueDate != null)
                message.vipDueDate = object.vipDueDate | 0;
            if (object.seenVideoList) {
                if (!Array.isArray(object.seenVideoList))
                    throw TypeError(".mb.UserInfo.seenVideoList: array expected");
                message.seenVideoList = [];
                for (var i = 0; i < object.seenVideoList.length; ++i)
                    message.seenVideoList[i] = object.seenVideoList[i] | 0;
            }
            if (object.videoCanPlay != null) {
                if (typeof object.videoCanPlay !== "object")
                    throw TypeError(".mb.UserInfo.videoCanPlay: object expected");
                message.videoCanPlay = $root.mb.CountPair.fromObject(object.videoCanPlay);
            }
            if (object.audioCanPlay != null) {
                if (typeof object.audioCanPlay !== "object")
                    throw TypeError(".mb.UserInfo.audioCanPlay: object expected");
                message.audioCanPlay = $root.mb.CountPair.fromObject(object.audioCanPlay);
            }
            if (object.novelCanPlay != null) {
                if (typeof object.novelCanPlay !== "object")
                    throw TypeError(".mb.UserInfo.novelCanPlay: object expected");
                message.novelCanPlay = $root.mb.CountPair.fromObject(object.novelCanPlay);
            }
            if (object.version != null)
                message.version = object.version | 0;
            return message;
        };

        /**
         * Creates a plain object from a UserInfo message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.UserInfo
         * @static
         * @param {mb.UserInfo} message UserInfo
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserInfo.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.arrays || options.defaults)
                object.seenVideoList = [];
            if (options.defaults) {
                object.id = "";
                object.phone = "";
                object.name = "";
                object.email = "";
                object.password = "";
                object.level = 0;
                object.balance = 0;
                object.vipDueDate = 0;
                object.videoCanPlay = null;
                object.audioCanPlay = null;
                object.novelCanPlay = null;
                object.version = 0;
            }
            if (message.id != null && message.hasOwnProperty("id"))
                object.id = message.id;
            if (message.phone != null && message.hasOwnProperty("phone"))
                object.phone = message.phone;
            if (message.name != null && message.hasOwnProperty("name"))
                object.name = message.name;
            if (message.email != null && message.hasOwnProperty("email"))
                object.email = message.email;
            if (message.password != null && message.hasOwnProperty("password"))
                object.password = message.password;
            if (message.level != null && message.hasOwnProperty("level"))
                object.level = message.level;
            if (message.balance != null && message.hasOwnProperty("balance"))
                object.balance = options.json && !isFinite(message.balance) ? String(message.balance) : message.balance;
            if (message.vipDueDate != null && message.hasOwnProperty("vipDueDate"))
                object.vipDueDate = message.vipDueDate;
            if (message.seenVideoList && message.seenVideoList.length) {
                object.seenVideoList = [];
                for (var j = 0; j < message.seenVideoList.length; ++j)
                    object.seenVideoList[j] = message.seenVideoList[j];
            }
            if (message.videoCanPlay != null && message.hasOwnProperty("videoCanPlay"))
                object.videoCanPlay = $root.mb.CountPair.toObject(message.videoCanPlay, options);
            if (message.audioCanPlay != null && message.hasOwnProperty("audioCanPlay"))
                object.audioCanPlay = $root.mb.CountPair.toObject(message.audioCanPlay, options);
            if (message.novelCanPlay != null && message.hasOwnProperty("novelCanPlay"))
                object.novelCanPlay = $root.mb.CountPair.toObject(message.novelCanPlay, options);
            if (message.version != null && message.hasOwnProperty("version"))
                object.version = message.version;
            return object;
        };

        /**
         * Converts this UserInfo to JSON.
         * @function toJSON
         * @memberof mb.UserInfo
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserInfo.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return UserInfo;
    })();

    mb.NotifyViewVideoRequest = (function() {

        /**
         * Properties of a NotifyViewVideoRequest.
         * @memberof mb
         * @interface INotifyViewVideoRequest
         * @property {string|null} [id] NotifyViewVideoRequest id
         * @property {string|null} [clientIP] NotifyViewVideoRequest clientIP
         * @property {number|null} [videoId] NotifyViewVideoRequest videoId
         * @property {string|null} [videoName] NotifyViewVideoRequest videoName
         * @property {number|null} [openTime] NotifyViewVideoRequest openTime
         * @property {number|null} [readyTime] NotifyViewVideoRequest readyTime
         * @property {number|null} [closeTime] NotifyViewVideoRequest closeTime
         */

        /**
         * Constructs a new NotifyViewVideoRequest.
         * @memberof mb
         * @classdesc Represents a NotifyViewVideoRequest.
         * @implements INotifyViewVideoRequest
         * @constructor
         * @param {mb.INotifyViewVideoRequest=} [properties] Properties to set
         */
        function NotifyViewVideoRequest(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * NotifyViewVideoRequest id.
         * @member {string} id
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.id = "";

        /**
         * NotifyViewVideoRequest clientIP.
         * @member {string} clientIP
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.clientIP = "";

        /**
         * NotifyViewVideoRequest videoId.
         * @member {number} videoId
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.videoId = 0;

        /**
         * NotifyViewVideoRequest videoName.
         * @member {string} videoName
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.videoName = "";

        /**
         * NotifyViewVideoRequest openTime.
         * @member {number} openTime
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.openTime = 0;

        /**
         * NotifyViewVideoRequest readyTime.
         * @member {number} readyTime
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.readyTime = 0;

        /**
         * NotifyViewVideoRequest closeTime.
         * @member {number} closeTime
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         */
        NotifyViewVideoRequest.prototype.closeTime = 0;

        /**
         * Creates a new NotifyViewVideoRequest instance using the specified properties.
         * @function create
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {mb.INotifyViewVideoRequest=} [properties] Properties to set
         * @returns {mb.NotifyViewVideoRequest} NotifyViewVideoRequest instance
         */
        NotifyViewVideoRequest.create = function create(properties) {
            return new NotifyViewVideoRequest(properties);
        };

        /**
         * Encodes the specified NotifyViewVideoRequest message. Does not implicitly {@link mb.NotifyViewVideoRequest.verify|verify} messages.
         * @function encode
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {mb.INotifyViewVideoRequest} message NotifyViewVideoRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        NotifyViewVideoRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.id != null && message.hasOwnProperty("id"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);
            if (message.clientIP != null && message.hasOwnProperty("clientIP"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.clientIP);
            if (message.videoId != null && message.hasOwnProperty("videoId"))
                writer.uint32(/* id 3, wireType 0 =*/24).int32(message.videoId);
            if (message.videoName != null && message.hasOwnProperty("videoName"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.videoName);
            if (message.openTime != null && message.hasOwnProperty("openTime"))
                writer.uint32(/* id 5, wireType 0 =*/40).int32(message.openTime);
            if (message.readyTime != null && message.hasOwnProperty("readyTime"))
                writer.uint32(/* id 6, wireType 0 =*/48).int32(message.readyTime);
            if (message.closeTime != null && message.hasOwnProperty("closeTime"))
                writer.uint32(/* id 7, wireType 0 =*/56).int32(message.closeTime);
            return writer;
        };

        /**
         * Encodes the specified NotifyViewVideoRequest message, length delimited. Does not implicitly {@link mb.NotifyViewVideoRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {mb.INotifyViewVideoRequest} message NotifyViewVideoRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        NotifyViewVideoRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a NotifyViewVideoRequest message from the specified reader or buffer.
         * @function decode
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.NotifyViewVideoRequest} NotifyViewVideoRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        NotifyViewVideoRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.NotifyViewVideoRequest();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.id = reader.string();
                    break;
                case 2:
                    message.clientIP = reader.string();
                    break;
                case 3:
                    message.videoId = reader.int32();
                    break;
                case 4:
                    message.videoName = reader.string();
                    break;
                case 5:
                    message.openTime = reader.int32();
                    break;
                case 6:
                    message.readyTime = reader.int32();
                    break;
                case 7:
                    message.closeTime = reader.int32();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a NotifyViewVideoRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.NotifyViewVideoRequest} NotifyViewVideoRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        NotifyViewVideoRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a NotifyViewVideoRequest message.
         * @function verify
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        NotifyViewVideoRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.id != null && message.hasOwnProperty("id"))
                if (!$util.isString(message.id))
                    return "id: string expected";
            if (message.clientIP != null && message.hasOwnProperty("clientIP"))
                if (!$util.isString(message.clientIP))
                    return "clientIP: string expected";
            if (message.videoId != null && message.hasOwnProperty("videoId"))
                if (!$util.isInteger(message.videoId))
                    return "videoId: integer expected";
            if (message.videoName != null && message.hasOwnProperty("videoName"))
                if (!$util.isString(message.videoName))
                    return "videoName: string expected";
            if (message.openTime != null && message.hasOwnProperty("openTime"))
                if (!$util.isInteger(message.openTime))
                    return "openTime: integer expected";
            if (message.readyTime != null && message.hasOwnProperty("readyTime"))
                if (!$util.isInteger(message.readyTime))
                    return "readyTime: integer expected";
            if (message.closeTime != null && message.hasOwnProperty("closeTime"))
                if (!$util.isInteger(message.closeTime))
                    return "closeTime: integer expected";
            return null;
        };

        /**
         * Creates a NotifyViewVideoRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.NotifyViewVideoRequest} NotifyViewVideoRequest
         */
        NotifyViewVideoRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.NotifyViewVideoRequest)
                return object;
            var message = new $root.mb.NotifyViewVideoRequest();
            if (object.id != null)
                message.id = String(object.id);
            if (object.clientIP != null)
                message.clientIP = String(object.clientIP);
            if (object.videoId != null)
                message.videoId = object.videoId | 0;
            if (object.videoName != null)
                message.videoName = String(object.videoName);
            if (object.openTime != null)
                message.openTime = object.openTime | 0;
            if (object.readyTime != null)
                message.readyTime = object.readyTime | 0;
            if (object.closeTime != null)
                message.closeTime = object.closeTime | 0;
            return message;
        };

        /**
         * Creates a plain object from a NotifyViewVideoRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.NotifyViewVideoRequest
         * @static
         * @param {mb.NotifyViewVideoRequest} message NotifyViewVideoRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        NotifyViewVideoRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.id = "";
                object.clientIP = "";
                object.videoId = 0;
                object.videoName = "";
                object.openTime = 0;
                object.readyTime = 0;
                object.closeTime = 0;
            }
            if (message.id != null && message.hasOwnProperty("id"))
                object.id = message.id;
            if (message.clientIP != null && message.hasOwnProperty("clientIP"))
                object.clientIP = message.clientIP;
            if (message.videoId != null && message.hasOwnProperty("videoId"))
                object.videoId = message.videoId;
            if (message.videoName != null && message.hasOwnProperty("videoName"))
                object.videoName = message.videoName;
            if (message.openTime != null && message.hasOwnProperty("openTime"))
                object.openTime = message.openTime;
            if (message.readyTime != null && message.hasOwnProperty("readyTime"))
                object.readyTime = message.readyTime;
            if (message.closeTime != null && message.hasOwnProperty("closeTime"))
                object.closeTime = message.closeTime;
            return object;
        };

        /**
         * Converts this NotifyViewVideoRequest to JSON.
         * @function toJSON
         * @memberof mb.NotifyViewVideoRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        NotifyViewVideoRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return NotifyViewVideoRequest;
    })();

    mb.UserFetchRequest = (function() {

        /**
         * Properties of a UserFetchRequest.
         * @memberof mb
         * @interface IUserFetchRequest
         * @property {string|null} [id] UserFetchRequest id
         * @property {string|null} [token] UserFetchRequest token
         */

        /**
         * Constructs a new UserFetchRequest.
         * @memberof mb
         * @classdesc Represents a UserFetchRequest.
         * @implements IUserFetchRequest
         * @constructor
         * @param {mb.IUserFetchRequest=} [properties] Properties to set
         */
        function UserFetchRequest(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserFetchRequest id.
         * @member {string} id
         * @memberof mb.UserFetchRequest
         * @instance
         */
        UserFetchRequest.prototype.id = "";

        /**
         * UserFetchRequest token.
         * @member {string} token
         * @memberof mb.UserFetchRequest
         * @instance
         */
        UserFetchRequest.prototype.token = "";

        /**
         * Creates a new UserFetchRequest instance using the specified properties.
         * @function create
         * @memberof mb.UserFetchRequest
         * @static
         * @param {mb.IUserFetchRequest=} [properties] Properties to set
         * @returns {mb.UserFetchRequest} UserFetchRequest instance
         */
        UserFetchRequest.create = function create(properties) {
            return new UserFetchRequest(properties);
        };

        /**
         * Encodes the specified UserFetchRequest message. Does not implicitly {@link mb.UserFetchRequest.verify|verify} messages.
         * @function encode
         * @memberof mb.UserFetchRequest
         * @static
         * @param {mb.IUserFetchRequest} message UserFetchRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserFetchRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.id != null && message.hasOwnProperty("id"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);
            if (message.token != null && message.hasOwnProperty("token"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.token);
            return writer;
        };

        /**
         * Encodes the specified UserFetchRequest message, length delimited. Does not implicitly {@link mb.UserFetchRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.UserFetchRequest
         * @static
         * @param {mb.IUserFetchRequest} message UserFetchRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserFetchRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserFetchRequest message from the specified reader or buffer.
         * @function decode
         * @memberof mb.UserFetchRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.UserFetchRequest} UserFetchRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserFetchRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.UserFetchRequest();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.id = reader.string();
                    break;
                case 2:
                    message.token = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserFetchRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.UserFetchRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.UserFetchRequest} UserFetchRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserFetchRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserFetchRequest message.
         * @function verify
         * @memberof mb.UserFetchRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserFetchRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.id != null && message.hasOwnProperty("id"))
                if (!$util.isString(message.id))
                    return "id: string expected";
            if (message.token != null && message.hasOwnProperty("token"))
                if (!$util.isString(message.token))
                    return "token: string expected";
            return null;
        };

        /**
         * Creates a UserFetchRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.UserFetchRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.UserFetchRequest} UserFetchRequest
         */
        UserFetchRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.UserFetchRequest)
                return object;
            var message = new $root.mb.UserFetchRequest();
            if (object.id != null)
                message.id = String(object.id);
            if (object.token != null)
                message.token = String(object.token);
            return message;
        };

        /**
         * Creates a plain object from a UserFetchRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.UserFetchRequest
         * @static
         * @param {mb.UserFetchRequest} message UserFetchRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserFetchRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.id = "";
                object.token = "";
            }
            if (message.id != null && message.hasOwnProperty("id"))
                object.id = message.id;
            if (message.token != null && message.hasOwnProperty("token"))
                object.token = message.token;
            return object;
        };

        /**
         * Converts this UserFetchRequest to JSON.
         * @function toJSON
         * @memberof mb.UserFetchRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserFetchRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return UserFetchRequest;
    })();

    mb.UserRegisterRequest = (function() {

        /**
         * Properties of a UserRegisterRequest.
         * @memberof mb
         * @interface IUserRegisterRequest
         * @property {string|null} [id] UserRegisterRequest id
         * @property {string|null} [phone] UserRegisterRequest phone
         * @property {string|null} [name] UserRegisterRequest name
         * @property {string|null} [email] UserRegisterRequest email
         * @property {string|null} [password] UserRegisterRequest password
         * @property {string|null} [verifyCode] UserRegisterRequest verifyCode
         */

        /**
         * Constructs a new UserRegisterRequest.
         * @memberof mb
         * @classdesc Represents a UserRegisterRequest.
         * @implements IUserRegisterRequest
         * @constructor
         * @param {mb.IUserRegisterRequest=} [properties] Properties to set
         */
        function UserRegisterRequest(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserRegisterRequest id.
         * @member {string} id
         * @memberof mb.UserRegisterRequest
         * @instance
         */
        UserRegisterRequest.prototype.id = "";

        /**
         * UserRegisterRequest phone.
         * @member {string} phone
         * @memberof mb.UserRegisterRequest
         * @instance
         */
        UserRegisterRequest.prototype.phone = "";

        /**
         * UserRegisterRequest name.
         * @member {string} name
         * @memberof mb.UserRegisterRequest
         * @instance
         */
        UserRegisterRequest.prototype.name = "";

        /**
         * UserRegisterRequest email.
         * @member {string} email
         * @memberof mb.UserRegisterRequest
         * @instance
         */
        UserRegisterRequest.prototype.email = "";

        /**
         * UserRegisterRequest password.
         * @member {string} password
         * @memberof mb.UserRegisterRequest
         * @instance
         */
        UserRegisterRequest.prototype.password = "";

        /**
         * UserRegisterRequest verifyCode.
         * @member {string} verifyCode
         * @memberof mb.UserRegisterRequest
         * @instance
         */
        UserRegisterRequest.prototype.verifyCode = "";

        /**
         * Creates a new UserRegisterRequest instance using the specified properties.
         * @function create
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {mb.IUserRegisterRequest=} [properties] Properties to set
         * @returns {mb.UserRegisterRequest} UserRegisterRequest instance
         */
        UserRegisterRequest.create = function create(properties) {
            return new UserRegisterRequest(properties);
        };

        /**
         * Encodes the specified UserRegisterRequest message. Does not implicitly {@link mb.UserRegisterRequest.verify|verify} messages.
         * @function encode
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {mb.IUserRegisterRequest} message UserRegisterRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserRegisterRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.id != null && message.hasOwnProperty("id"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);
            if (message.phone != null && message.hasOwnProperty("phone"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.phone);
            if (message.name != null && message.hasOwnProperty("name"))
                writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);
            if (message.email != null && message.hasOwnProperty("email"))
                writer.uint32(/* id 4, wireType 2 =*/34).string(message.email);
            if (message.password != null && message.hasOwnProperty("password"))
                writer.uint32(/* id 5, wireType 2 =*/42).string(message.password);
            if (message.verifyCode != null && message.hasOwnProperty("verifyCode"))
                writer.uint32(/* id 6, wireType 2 =*/50).string(message.verifyCode);
            return writer;
        };

        /**
         * Encodes the specified UserRegisterRequest message, length delimited. Does not implicitly {@link mb.UserRegisterRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {mb.IUserRegisterRequest} message UserRegisterRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserRegisterRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserRegisterRequest message from the specified reader or buffer.
         * @function decode
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.UserRegisterRequest} UserRegisterRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserRegisterRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.UserRegisterRequest();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.id = reader.string();
                    break;
                case 2:
                    message.phone = reader.string();
                    break;
                case 3:
                    message.name = reader.string();
                    break;
                case 4:
                    message.email = reader.string();
                    break;
                case 5:
                    message.password = reader.string();
                    break;
                case 6:
                    message.verifyCode = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserRegisterRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.UserRegisterRequest} UserRegisterRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserRegisterRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserRegisterRequest message.
         * @function verify
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserRegisterRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.id != null && message.hasOwnProperty("id"))
                if (!$util.isString(message.id))
                    return "id: string expected";
            if (message.phone != null && message.hasOwnProperty("phone"))
                if (!$util.isString(message.phone))
                    return "phone: string expected";
            if (message.name != null && message.hasOwnProperty("name"))
                if (!$util.isString(message.name))
                    return "name: string expected";
            if (message.email != null && message.hasOwnProperty("email"))
                if (!$util.isString(message.email))
                    return "email: string expected";
            if (message.password != null && message.hasOwnProperty("password"))
                if (!$util.isString(message.password))
                    return "password: string expected";
            if (message.verifyCode != null && message.hasOwnProperty("verifyCode"))
                if (!$util.isString(message.verifyCode))
                    return "verifyCode: string expected";
            return null;
        };

        /**
         * Creates a UserRegisterRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.UserRegisterRequest} UserRegisterRequest
         */
        UserRegisterRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.UserRegisterRequest)
                return object;
            var message = new $root.mb.UserRegisterRequest();
            if (object.id != null)
                message.id = String(object.id);
            if (object.phone != null)
                message.phone = String(object.phone);
            if (object.name != null)
                message.name = String(object.name);
            if (object.email != null)
                message.email = String(object.email);
            if (object.password != null)
                message.password = String(object.password);
            if (object.verifyCode != null)
                message.verifyCode = String(object.verifyCode);
            return message;
        };

        /**
         * Creates a plain object from a UserRegisterRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.UserRegisterRequest
         * @static
         * @param {mb.UserRegisterRequest} message UserRegisterRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserRegisterRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.id = "";
                object.phone = "";
                object.name = "";
                object.email = "";
                object.password = "";
                object.verifyCode = "";
            }
            if (message.id != null && message.hasOwnProperty("id"))
                object.id = message.id;
            if (message.phone != null && message.hasOwnProperty("phone"))
                object.phone = message.phone;
            if (message.name != null && message.hasOwnProperty("name"))
                object.name = message.name;
            if (message.email != null && message.hasOwnProperty("email"))
                object.email = message.email;
            if (message.password != null && message.hasOwnProperty("password"))
                object.password = message.password;
            if (message.verifyCode != null && message.hasOwnProperty("verifyCode"))
                object.verifyCode = message.verifyCode;
            return object;
        };

        /**
         * Converts this UserRegisterRequest to JSON.
         * @function toJSON
         * @memberof mb.UserRegisterRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserRegisterRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return UserRegisterRequest;
    })();

    mb.UserRegisterResult = (function() {

        /**
         * Properties of a UserRegisterResult.
         * @memberof mb
         * @interface IUserRegisterResult
         * @property {boolean|null} [ok] UserRegisterResult ok
         * @property {string|null} [msg] UserRegisterResult msg
         */

        /**
         * Constructs a new UserRegisterResult.
         * @memberof mb
         * @classdesc Represents a UserRegisterResult.
         * @implements IUserRegisterResult
         * @constructor
         * @param {mb.IUserRegisterResult=} [properties] Properties to set
         */
        function UserRegisterResult(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserRegisterResult ok.
         * @member {boolean} ok
         * @memberof mb.UserRegisterResult
         * @instance
         */
        UserRegisterResult.prototype.ok = false;

        /**
         * UserRegisterResult msg.
         * @member {string} msg
         * @memberof mb.UserRegisterResult
         * @instance
         */
        UserRegisterResult.prototype.msg = "";

        /**
         * Creates a new UserRegisterResult instance using the specified properties.
         * @function create
         * @memberof mb.UserRegisterResult
         * @static
         * @param {mb.IUserRegisterResult=} [properties] Properties to set
         * @returns {mb.UserRegisterResult} UserRegisterResult instance
         */
        UserRegisterResult.create = function create(properties) {
            return new UserRegisterResult(properties);
        };

        /**
         * Encodes the specified UserRegisterResult message. Does not implicitly {@link mb.UserRegisterResult.verify|verify} messages.
         * @function encode
         * @memberof mb.UserRegisterResult
         * @static
         * @param {mb.IUserRegisterResult} message UserRegisterResult message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserRegisterResult.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.ok != null && message.hasOwnProperty("ok"))
                writer.uint32(/* id 1, wireType 0 =*/8).bool(message.ok);
            if (message.msg != null && message.hasOwnProperty("msg"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.msg);
            return writer;
        };

        /**
         * Encodes the specified UserRegisterResult message, length delimited. Does not implicitly {@link mb.UserRegisterResult.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.UserRegisterResult
         * @static
         * @param {mb.IUserRegisterResult} message UserRegisterResult message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserRegisterResult.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserRegisterResult message from the specified reader or buffer.
         * @function decode
         * @memberof mb.UserRegisterResult
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.UserRegisterResult} UserRegisterResult
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserRegisterResult.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.UserRegisterResult();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.ok = reader.bool();
                    break;
                case 2:
                    message.msg = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserRegisterResult message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.UserRegisterResult
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.UserRegisterResult} UserRegisterResult
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserRegisterResult.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserRegisterResult message.
         * @function verify
         * @memberof mb.UserRegisterResult
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserRegisterResult.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.ok != null && message.hasOwnProperty("ok"))
                if (typeof message.ok !== "boolean")
                    return "ok: boolean expected";
            if (message.msg != null && message.hasOwnProperty("msg"))
                if (!$util.isString(message.msg))
                    return "msg: string expected";
            return null;
        };

        /**
         * Creates a UserRegisterResult message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.UserRegisterResult
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.UserRegisterResult} UserRegisterResult
         */
        UserRegisterResult.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.UserRegisterResult)
                return object;
            var message = new $root.mb.UserRegisterResult();
            if (object.ok != null)
                message.ok = Boolean(object.ok);
            if (object.msg != null)
                message.msg = String(object.msg);
            return message;
        };

        /**
         * Creates a plain object from a UserRegisterResult message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.UserRegisterResult
         * @static
         * @param {mb.UserRegisterResult} message UserRegisterResult
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserRegisterResult.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.ok = false;
                object.msg = "";
            }
            if (message.ok != null && message.hasOwnProperty("ok"))
                object.ok = message.ok;
            if (message.msg != null && message.hasOwnProperty("msg"))
                object.msg = message.msg;
            return object;
        };

        /**
         * Converts this UserRegisterResult to JSON.
         * @function toJSON
         * @memberof mb.UserRegisterResult
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserRegisterResult.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return UserRegisterResult;
    })();

    mb.UserLoginRequest = (function() {

        /**
         * Properties of a UserLoginRequest.
         * @memberof mb
         * @interface IUserLoginRequest
         * @property {string|null} [phone] UserLoginRequest phone
         * @property {string|null} [password] UserLoginRequest password
         */

        /**
         * Constructs a new UserLoginRequest.
         * @memberof mb
         * @classdesc Represents a UserLoginRequest.
         * @implements IUserLoginRequest
         * @constructor
         * @param {mb.IUserLoginRequest=} [properties] Properties to set
         */
        function UserLoginRequest(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserLoginRequest phone.
         * @member {string} phone
         * @memberof mb.UserLoginRequest
         * @instance
         */
        UserLoginRequest.prototype.phone = "";

        /**
         * UserLoginRequest password.
         * @member {string} password
         * @memberof mb.UserLoginRequest
         * @instance
         */
        UserLoginRequest.prototype.password = "";

        /**
         * Creates a new UserLoginRequest instance using the specified properties.
         * @function create
         * @memberof mb.UserLoginRequest
         * @static
         * @param {mb.IUserLoginRequest=} [properties] Properties to set
         * @returns {mb.UserLoginRequest} UserLoginRequest instance
         */
        UserLoginRequest.create = function create(properties) {
            return new UserLoginRequest(properties);
        };

        /**
         * Encodes the specified UserLoginRequest message. Does not implicitly {@link mb.UserLoginRequest.verify|verify} messages.
         * @function encode
         * @memberof mb.UserLoginRequest
         * @static
         * @param {mb.IUserLoginRequest} message UserLoginRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserLoginRequest.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.phone != null && message.hasOwnProperty("phone"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.phone);
            if (message.password != null && message.hasOwnProperty("password"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.password);
            return writer;
        };

        /**
         * Encodes the specified UserLoginRequest message, length delimited. Does not implicitly {@link mb.UserLoginRequest.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.UserLoginRequest
         * @static
         * @param {mb.IUserLoginRequest} message UserLoginRequest message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserLoginRequest.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserLoginRequest message from the specified reader or buffer.
         * @function decode
         * @memberof mb.UserLoginRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.UserLoginRequest} UserLoginRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserLoginRequest.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.UserLoginRequest();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.phone = reader.string();
                    break;
                case 2:
                    message.password = reader.string();
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserLoginRequest message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.UserLoginRequest
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.UserLoginRequest} UserLoginRequest
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserLoginRequest.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserLoginRequest message.
         * @function verify
         * @memberof mb.UserLoginRequest
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserLoginRequest.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.phone != null && message.hasOwnProperty("phone"))
                if (!$util.isString(message.phone))
                    return "phone: string expected";
            if (message.password != null && message.hasOwnProperty("password"))
                if (!$util.isString(message.password))
                    return "password: string expected";
            return null;
        };

        /**
         * Creates a UserLoginRequest message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.UserLoginRequest
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.UserLoginRequest} UserLoginRequest
         */
        UserLoginRequest.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.UserLoginRequest)
                return object;
            var message = new $root.mb.UserLoginRequest();
            if (object.phone != null)
                message.phone = String(object.phone);
            if (object.password != null)
                message.password = String(object.password);
            return message;
        };

        /**
         * Creates a plain object from a UserLoginRequest message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.UserLoginRequest
         * @static
         * @param {mb.UserLoginRequest} message UserLoginRequest
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserLoginRequest.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.phone = "";
                object.password = "";
            }
            if (message.phone != null && message.hasOwnProperty("phone"))
                object.phone = message.phone;
            if (message.password != null && message.hasOwnProperty("password"))
                object.password = message.password;
            return object;
        };

        /**
         * Converts this UserLoginRequest to JSON.
         * @function toJSON
         * @memberof mb.UserLoginRequest
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserLoginRequest.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return UserLoginRequest;
    })();

    mb.UserLoginResult = (function() {

        /**
         * Properties of a UserLoginResult.
         * @memberof mb
         * @interface IUserLoginResult
         * @property {string|null} [msg] UserLoginResult msg
         * @property {string|null} [token] UserLoginResult token
         * @property {mb.IUserInfo|null} [user] UserLoginResult user
         */

        /**
         * Constructs a new UserLoginResult.
         * @memberof mb
         * @classdesc Represents a UserLoginResult.
         * @implements IUserLoginResult
         * @constructor
         * @param {mb.IUserLoginResult=} [properties] Properties to set
         */
        function UserLoginResult(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * UserLoginResult msg.
         * @member {string} msg
         * @memberof mb.UserLoginResult
         * @instance
         */
        UserLoginResult.prototype.msg = "";

        /**
         * UserLoginResult token.
         * @member {string} token
         * @memberof mb.UserLoginResult
         * @instance
         */
        UserLoginResult.prototype.token = "";

        /**
         * UserLoginResult user.
         * @member {mb.IUserInfo|null|undefined} user
         * @memberof mb.UserLoginResult
         * @instance
         */
        UserLoginResult.prototype.user = null;

        /**
         * Creates a new UserLoginResult instance using the specified properties.
         * @function create
         * @memberof mb.UserLoginResult
         * @static
         * @param {mb.IUserLoginResult=} [properties] Properties to set
         * @returns {mb.UserLoginResult} UserLoginResult instance
         */
        UserLoginResult.create = function create(properties) {
            return new UserLoginResult(properties);
        };

        /**
         * Encodes the specified UserLoginResult message. Does not implicitly {@link mb.UserLoginResult.verify|verify} messages.
         * @function encode
         * @memberof mb.UserLoginResult
         * @static
         * @param {mb.IUserLoginResult} message UserLoginResult message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserLoginResult.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            if (message.msg != null && message.hasOwnProperty("msg"))
                writer.uint32(/* id 1, wireType 2 =*/10).string(message.msg);
            if (message.token != null && message.hasOwnProperty("token"))
                writer.uint32(/* id 2, wireType 2 =*/18).string(message.token);
            if (message.user != null && message.hasOwnProperty("user"))
                $root.mb.UserInfo.encode(message.user, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
            return writer;
        };

        /**
         * Encodes the specified UserLoginResult message, length delimited. Does not implicitly {@link mb.UserLoginResult.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.UserLoginResult
         * @static
         * @param {mb.IUserLoginResult} message UserLoginResult message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        UserLoginResult.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes a UserLoginResult message from the specified reader or buffer.
         * @function decode
         * @memberof mb.UserLoginResult
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.UserLoginResult} UserLoginResult
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserLoginResult.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.UserLoginResult();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                case 1:
                    message.msg = reader.string();
                    break;
                case 2:
                    message.token = reader.string();
                    break;
                case 3:
                    message.user = $root.mb.UserInfo.decode(reader, reader.uint32());
                    break;
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes a UserLoginResult message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.UserLoginResult
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.UserLoginResult} UserLoginResult
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        UserLoginResult.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies a UserLoginResult message.
         * @function verify
         * @memberof mb.UserLoginResult
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        UserLoginResult.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            if (message.msg != null && message.hasOwnProperty("msg"))
                if (!$util.isString(message.msg))
                    return "msg: string expected";
            if (message.token != null && message.hasOwnProperty("token"))
                if (!$util.isString(message.token))
                    return "token: string expected";
            if (message.user != null && message.hasOwnProperty("user")) {
                var error = $root.mb.UserInfo.verify(message.user);
                if (error)
                    return "user." + error;
            }
            return null;
        };

        /**
         * Creates a UserLoginResult message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.UserLoginResult
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.UserLoginResult} UserLoginResult
         */
        UserLoginResult.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.UserLoginResult)
                return object;
            var message = new $root.mb.UserLoginResult();
            if (object.msg != null)
                message.msg = String(object.msg);
            if (object.token != null)
                message.token = String(object.token);
            if (object.user != null) {
                if (typeof object.user !== "object")
                    throw TypeError(".mb.UserLoginResult.user: object expected");
                message.user = $root.mb.UserInfo.fromObject(object.user);
            }
            return message;
        };

        /**
         * Creates a plain object from a UserLoginResult message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.UserLoginResult
         * @static
         * @param {mb.UserLoginResult} message UserLoginResult
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        UserLoginResult.toObject = function toObject(message, options) {
            if (!options)
                options = {};
            var object = {};
            if (options.defaults) {
                object.msg = "";
                object.token = "";
                object.user = null;
            }
            if (message.msg != null && message.hasOwnProperty("msg"))
                object.msg = message.msg;
            if (message.token != null && message.hasOwnProperty("token"))
                object.token = message.token;
            if (message.user != null && message.hasOwnProperty("user"))
                object.user = $root.mb.UserInfo.toObject(message.user, options);
            return object;
        };

        /**
         * Converts this UserLoginResult to JSON.
         * @function toJSON
         * @memberof mb.UserLoginResult
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        UserLoginResult.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return UserLoginResult;
    })();

    mb.Empty = (function() {

        /**
         * Properties of an Empty.
         * @memberof mb
         * @interface IEmpty
         */

        /**
         * Constructs a new Empty.
         * @memberof mb
         * @classdesc Represents an Empty.
         * @implements IEmpty
         * @constructor
         * @param {mb.IEmpty=} [properties] Properties to set
         */
        function Empty(properties) {
            if (properties)
                for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
                    if (properties[keys[i]] != null)
                        this[keys[i]] = properties[keys[i]];
        }

        /**
         * Creates a new Empty instance using the specified properties.
         * @function create
         * @memberof mb.Empty
         * @static
         * @param {mb.IEmpty=} [properties] Properties to set
         * @returns {mb.Empty} Empty instance
         */
        Empty.create = function create(properties) {
            return new Empty(properties);
        };

        /**
         * Encodes the specified Empty message. Does not implicitly {@link mb.Empty.verify|verify} messages.
         * @function encode
         * @memberof mb.Empty
         * @static
         * @param {mb.IEmpty} message Empty message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        Empty.encode = function encode(message, writer) {
            if (!writer)
                writer = $Writer.create();
            return writer;
        };

        /**
         * Encodes the specified Empty message, length delimited. Does not implicitly {@link mb.Empty.verify|verify} messages.
         * @function encodeDelimited
         * @memberof mb.Empty
         * @static
         * @param {mb.IEmpty} message Empty message or plain object to encode
         * @param {$protobuf.Writer} [writer] Writer to encode to
         * @returns {$protobuf.Writer} Writer
         */
        Empty.encodeDelimited = function encodeDelimited(message, writer) {
            return this.encode(message, writer).ldelim();
        };

        /**
         * Decodes an Empty message from the specified reader or buffer.
         * @function decode
         * @memberof mb.Empty
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @param {number} [length] Message length if known beforehand
         * @returns {mb.Empty} Empty
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        Empty.decode = function decode(reader, length) {
            if (!(reader instanceof $Reader))
                reader = $Reader.create(reader);
            var end = length === undefined ? reader.len : reader.pos + length, message = new $root.mb.Empty();
            while (reader.pos < end) {
                var tag = reader.uint32();
                switch (tag >>> 3) {
                default:
                    reader.skipType(tag & 7);
                    break;
                }
            }
            return message;
        };

        /**
         * Decodes an Empty message from the specified reader or buffer, length delimited.
         * @function decodeDelimited
         * @memberof mb.Empty
         * @static
         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
         * @returns {mb.Empty} Empty
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        Empty.decodeDelimited = function decodeDelimited(reader) {
            if (!(reader instanceof $Reader))
                reader = new $Reader(reader);
            return this.decode(reader, reader.uint32());
        };

        /**
         * Verifies an Empty message.
         * @function verify
         * @memberof mb.Empty
         * @static
         * @param {Object.<string,*>} message Plain object to verify
         * @returns {string|null} `null` if valid, otherwise the reason why it is not
         */
        Empty.verify = function verify(message) {
            if (typeof message !== "object" || message === null)
                return "object expected";
            return null;
        };

        /**
         * Creates an Empty message from a plain object. Also converts values to their respective internal types.
         * @function fromObject
         * @memberof mb.Empty
         * @static
         * @param {Object.<string,*>} object Plain object
         * @returns {mb.Empty} Empty
         */
        Empty.fromObject = function fromObject(object) {
            if (object instanceof $root.mb.Empty)
                return object;
            return new $root.mb.Empty();
        };

        /**
         * Creates a plain object from an Empty message. Also converts values to other types if specified.
         * @function toObject
         * @memberof mb.Empty
         * @static
         * @param {mb.Empty} message Empty
         * @param {$protobuf.IConversionOptions} [options] Conversion options
         * @returns {Object.<string,*>} Plain object
         */
        Empty.toObject = function toObject() {
            return {};
        };

        /**
         * Converts this Empty to JSON.
         * @function toJSON
         * @memberof mb.Empty
         * @instance
         * @returns {Object.<string,*>} JSON object
         */
        Empty.prototype.toJSON = function toJSON() {
            return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
        };

        return Empty;
    })();

    mb.UserService = (function() {

        /**
         * Constructs a new UserService service.
         * @memberof mb
         * @classdesc Represents a UserService
         * @extends $protobuf.rpc.Service
         * @constructor
         * @param {$protobuf.RPCImpl} rpcImpl RPC implementation
         * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
         * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
         */
        function UserService(rpcImpl, requestDelimited, responseDelimited) {
            $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited);
        }

        (UserService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = UserService;

        /**
         * Creates new UserService service using the specified rpc implementation.
         * @function create
         * @memberof mb.UserService
         * @static
         * @param {$protobuf.RPCImpl} rpcImpl RPC implementation
         * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
         * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
         * @returns {UserService} RPC service. Useful where requests and/or responses are streamed.
         */
        UserService.create = function create(rpcImpl, requestDelimited, responseDelimited) {
            return new this(rpcImpl, requestDelimited, responseDelimited);
        };

        /**
         * Callback as used by {@link mb.UserService#fetch}.
         * @memberof mb.UserService
         * @typedef FetchCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {mb.UserInfo} [response] UserInfo
         */

        /**
         * Calls Fetch.
         * @function fetch
         * @memberof mb.UserService
         * @instance
         * @param {mb.IUserFetchRequest} request UserFetchRequest message or plain object
         * @param {mb.UserService.FetchCallback} callback Node-style callback called with the error, if any, and UserInfo
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(UserService.prototype.fetch = function fetch(request, callback) {
            return this.rpcCall(fetch, $root.mb.UserFetchRequest, $root.mb.UserInfo, request, callback);
        }, "name", { value: "Fetch" });

        /**
         * Calls Fetch.
         * @function fetch
         * @memberof mb.UserService
         * @instance
         * @param {mb.IUserFetchRequest} request UserFetchRequest message or plain object
         * @returns {Promise<mb.UserInfo>} Promise
         * @variation 2
         */

        /**
         * Callback as used by {@link mb.UserService#register}.
         * @memberof mb.UserService
         * @typedef RegisterCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {mb.UserRegisterResult} [response] UserRegisterResult
         */

        /**
         * Calls Register.
         * @function register
         * @memberof mb.UserService
         * @instance
         * @param {mb.IUserRegisterRequest} request UserRegisterRequest message or plain object
         * @param {mb.UserService.RegisterCallback} callback Node-style callback called with the error, if any, and UserRegisterResult
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(UserService.prototype.register = function register(request, callback) {
            return this.rpcCall(register, $root.mb.UserRegisterRequest, $root.mb.UserRegisterResult, request, callback);
        }, "name", { value: "Register" });

        /**
         * Calls Register.
         * @function register
         * @memberof mb.UserService
         * @instance
         * @param {mb.IUserRegisterRequest} request UserRegisterRequest message or plain object
         * @returns {Promise<mb.UserRegisterResult>} Promise
         * @variation 2
         */

        /**
         * Callback as used by {@link mb.UserService#login}.
         * @memberof mb.UserService
         * @typedef LoginCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {mb.UserLoginResult} [response] UserLoginResult
         */

        /**
         * Calls Login.
         * @function login
         * @memberof mb.UserService
         * @instance
         * @param {mb.IUserLoginRequest} request UserLoginRequest message or plain object
         * @param {mb.UserService.LoginCallback} callback Node-style callback called with the error, if any, and UserLoginResult
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(UserService.prototype.login = function login(request, callback) {
            return this.rpcCall(login, $root.mb.UserLoginRequest, $root.mb.UserLoginResult, request, callback);
        }, "name", { value: "Login" });

        /**
         * Calls Login.
         * @function login
         * @memberof mb.UserService
         * @instance
         * @param {mb.IUserLoginRequest} request UserLoginRequest message or plain object
         * @returns {Promise<mb.UserLoginResult>} Promise
         * @variation 2
         */

        /**
         * Callback as used by {@link mb.UserService#notifyViewVideo}.
         * @memberof mb.UserService
         * @typedef NotifyViewVideoCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {mb.Empty} [response] Empty
         */

        /**
         * Calls NotifyViewVideo.
         * @function notifyViewVideo
         * @memberof mb.UserService
         * @instance
         * @param {mb.INotifyViewVideoRequest} request NotifyViewVideoRequest message or plain object
         * @param {mb.UserService.NotifyViewVideoCallback} callback Node-style callback called with the error, if any, and Empty
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(UserService.prototype.notifyViewVideo = function notifyViewVideo(request, callback) {
            return this.rpcCall(notifyViewVideo, $root.mb.NotifyViewVideoRequest, $root.mb.Empty, request, callback);
        }, "name", { value: "NotifyViewVideo" });

        /**
         * Calls NotifyViewVideo.
         * @function notifyViewVideo
         * @memberof mb.UserService
         * @instance
         * @param {mb.INotifyViewVideoRequest} request NotifyViewVideoRequest message or plain object
         * @returns {Promise<mb.Empty>} Promise
         * @variation 2
         */

        /**
         * Callback as used by {@link mb.UserService#pullOnlineConfig}.
         * @memberof mb.UserService
         * @typedef PullOnlineConfigCallback
         * @type {function}
         * @param {Error|null} error Error, if any
         * @param {mb.OnlineConfig} [response] OnlineConfig
         */

        /**
         * Calls PullOnlineConfig.
         * @function pullOnlineConfig
         * @memberof mb.UserService
         * @instance
         * @param {mb.IEmpty} request Empty message or plain object
         * @param {mb.UserService.PullOnlineConfigCallback} callback Node-style callback called with the error, if any, and OnlineConfig
         * @returns {undefined}
         * @variation 1
         */
        Object.defineProperty(UserService.prototype.pullOnlineConfig = function pullOnlineConfig(request, callback) {
            return this.rpcCall(pullOnlineConfig, $root.mb.Empty, $root.mb.OnlineConfig, request, callback);
        }, "name", { value: "PullOnlineConfig" });

        /**
         * Calls PullOnlineConfig.
         * @function pullOnlineConfig
         * @memberof mb.UserService
         * @instance
         * @param {mb.IEmpty} request Empty message or plain object
         * @returns {Promise<mb.OnlineConfig>} Promise
         * @variation 2
         */

        return UserService;
    })();

    mb.ConfigService = (function() {

        /**
         * Constructs a new ConfigService service.
         * @memberof mb
         * @classdesc Represents a ConfigService
         * @extends $protobuf.rpc.Service
         * @constructor
         * @param {$protobuf.RPCImpl} rpcImpl RPC implementation
         * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
         * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
         */
        function ConfigService(rpcImpl, requestDelimited, responseDelimited) {
            $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited);
        }

        (ConfigService.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = ConfigService;

        /**
         * Creates new ConfigService service using the specified rpc implementation.
         * @function create
         * @memberof mb.ConfigService
         * @static
         * @param {$protobuf.RPCImpl} rpcImpl RPC implementation
         * @param {boolean} [requestDelimited=false] Whether requests are length-delimited
         * @param {boolean} [responseDelimited=false] Whether responses are length-delimited
         * @returns {ConfigService} RPC service. Useful where requests and/or responses are streamed.
         */
        ConfigService.create = function create(rpcImpl, requestDelimited, responseDelimited) {
            return new this(rpcImpl, requestDelimited, responseDelimited);
        };

        return ConfigService;
    })();

    return mb;
})();

module.exports = $root;
